今天我們來做做看第一個小遊戲吧!
在這之前要先了解兩個幾乎所有程式當會碰到的概念:條件式,下面就來簡單介紹一下。
在 JavaScript 與大多數語言一樣,有兩種常用用來判斷條件式的語法: if/else 和 switch/case 。
語法就是:如果符合了if(條件式){程式碼}
的條件式(條件式為 true ),則執行他的程式碼,反之則查看下一個 else if(條件式){程式碼}
裡的條件式是不是 true ,以此類推直到所有 else if 都檢查完畢,最後如果有一個 else
,就執行他的程式碼。
好像繞口令一樣,我們直接看以下的範例:
if(num > 10){
console.log("比10大");
}
else if(num > 5){
console.log("比5大");
}
else if(num <= 5){
console.log("比5小(或等於5)");
}
else{
console.log("不是數字");
}
如果輸入 num = 20;
,在第一個 if 條件式的地方就是 true,所以會輸出 "比10大" 。要注意的是,這時候不會繼續檢查期他 else if 裡條件式是不是 true,所以並不會再輸出一個 "比5大" 。
如果輸入 num = 2;
,前面的 if 和第一個 else if 裡的條件式都是 false ,來到第二個 else if 的地方,他的條件式是 true ,所以會輸出 "比5小(或等於5)" 。
如果輸入 num = "abc";
,因為 "abc" 在做與數字比較的運算時,會轉型為型別為 number 的 NaN (Not a Number),而 NaN 這個 number(對,是 number) 不相於任何其他數字,所以前面三個條件式都為 false,會執行 else 的程式碼,輸出 "不是數字" 。
switch/case 適合用在條件很多,條件式又不是一個範圍而是一個值的狀況。 (其他狀況就用 if/else 吧)
這次我們直接來看範例:
switch(score){
case 'A':
console.log("高於90分");
break;
case 'B':
console.log("高於80分");
break;
case 'C':
console.log("高於70分");
break;
case 'D':
console.log("高於60分");
break;
default:
console.log("不及格");
}
當 case 的值符合 switch(條件) ,就會開始執行以下的程式碼。注意一下是所有以下的程式碼。所以我們需要用 break; 這個語法來做打斷,跳出 swtich。
接著就可以來實做第一個遊戲了:猜數字遊戲
在HTML的部分,我們製作一個用來起動遊戲的按鈕:
<button type="button" onclick="checkNum()">開始猜數字遊戲</button>
在 JavaScript 的部分,我們先做一個能夠產生隨機數的 function (在主程式會用到):
//取一個隨機數
function GetRandomNumber(min,max)
{
var range = max - min;
var rand = Math.random();
return(min + Math.round(rand * range));
}
主程式的部分如下:
裡頭用到的 prompt 和 alert 都是 window 的 method ,用來跳出對話盒用的。
//猜數字遊戲
function checkNum(){
var min = 1;
var max = 100;
var times = 10;
var answer = GetRandomNumber(min,max);
var playerGuess;
var messageOfRange = "範圍 : " + min + " 到 " + max;
var messageOfPrompt = "\n這個數字比 " + playerGuess + " 還要";
alert("猜數字遊戲開始");
for(var i = times ; i > 0 ; i-- ){
if (i === times){
playerGuess = prompt(messageOfRange
+ " ,總共有 " + i + " 次機會。","");
}
else{
if(!(playerGuess <= max && playerGuess >= min)){
playerGuess = prompt("輸入錯誤,請重新輸入。","");
i++;
}
else if(answer > playerGuess){
playerGuess = prompt(messageOfRange
+ " ,你還有 " + i + " 次機會。"
+ "\n這個數字比 " + playerGuess + " 還要" + "大。","");
}
else if(answer < playerGuess){
playerGuess = prompt(messageOfRange
+ " ,你還有 " + i + " 次機會。"
+ "\n這個數字比 " + playerGuess + " 還要" + "小。","");
}
else if(answer == playerGuess){
alert("恭喜答對!你一共猜了 " + (times-i) + " 次。");
break;
}
}
console.log(playerGuess);
}
alert("遊戲結束!正確答案是 " + answer + " 。");
}
覺得可以講個東西太多了,接下來要收束一下,專心講一個東西效果應該會比較好。(而且差點寫不完)